package cc.rengu.igas.bsps.facade;

import cc.rengu.igas.bsps.facade.request.*;
import cc.rengu.igas.bsps.facade.response.*;
import cc.rengu.igas.bsps.facade.result.Result;

/**
 * 商户管理服务
 * Created by 王成 on 2018/7/19.
 * Updated by zhangxuran on 2020/04/05
 */
public interface MchntManageService {

    /**
     * 商户入驻申请
     *
     * @param mchntEntryRegisterRequest 请求报文
     * @return 响应报文
     */
    Result<MchntApplyResponse> mchntApply(MchntApplyRequest mchntEntryRegisterRequest);

    /**
     * 商户绑定认证
     *
     * @param mchntBindAuthRequest 请求报文
     * @return 响应报文
     */
    Result<MchntBindAuthResponse> mchntBindAuth(MchntBindAuthRequest mchntBindAuthRequest);

    /**
     * 商户绑定注册
     *
     * @param mchntBindRegisterRequest 请求报文
     * @return 响应报文
     */
    Result<MchntBindRegisterResponse> mchntBindRegister(MchntBindRegisterRequest mchntBindRegisterRequest);

    /**
     * 商户解绑
     *
     * @param mchntUnBindRequest 请求报文
     * @return 响应报文
     */
    Result<MchntUnBindResponse> mchntUnBind(MchntUnBindRequest mchntUnBindRequest);

    /**
     * 拓展经理认证
     *
     * @param managerAuthRequest 请求报文
     * @return 响应报文
     */
    Result<ManagerAuthResponse> managerAuth(ManagerAuthRequest managerAuthRequest);

    /**
     * 拓展经理受理商户
     *
     * @param mchntExpandAcceptRequest 请求报文
     * @return 响应报文
     */
    Result<MchntExpandAcceptResponse> mchntExpandAccept(MchntExpandAcceptRequest mchntExpandAcceptRequest);

    /**
     * 工单处理
     *
     * @param eventProcessRequest 请求报文
     * @return 响应报文
     */
    Result<EventProcessResponse> eventProcess(EventProcessRequest eventProcessRequest);

    /**
     * 对账单下载
     *
     * @param reconDetailDownloadRequest 请求报文
     * @return 响应报文
     */
    Result<ReconDetailDownloadResponse> reconDetailDownload(ReconDetailDownloadRequest reconDetailDownloadRequest);

    /**
     * 虚拟账户余额提现
     *
     * @param request 请求报文
     * @return 响应报文
     */
    Result<MchntCashWithdrawalResponse> mchntCashWithdrawal(MchntCashWithdrawalRequest request);

    /**
     * 语音设备绑定及解绑查询操作
     *
     * @param voiceDevBindOrUnBindRequest 请求报文
     * @return 响应报文
     */
    Result<VoiceDevBindOrUnBindResponse> voiceDevBindOrUnBind(VoiceDevBindOrUnBindRequest voiceDevBindOrUnBindRequest);

}
